package com.wind.a_多线程的创建;

import java.util.concurrent.Callable;

/**
 * 这种方式创建并启动多线程的步骤如下：
 * 1、创建Callable接口实现类，并实现call()方法，该方法将作为线程执行体，且该方法有返回值，再创建Callable实现类的实例；
 * 2、使用FutureTask类来包装Callable对象，该FutureTask对象封装了该Callable对象的call()方法的返回值；
 * 3、使用FutureTask对象作为Thread对象的target创建并启动新线程；
 * 4、调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
 *
 * @author Windy
 */
public class ThirdThreadImp1 implements Callable{

    private int i;

    @Override
    public Object call() throws Exception {
        for (; i < 100; i++) {
            //当通过继承Thread类的方式实现多线程时，可以直接使用this获取当前执行的线程
            System.out.println("子线程 ---> " + Thread.currentThread().getName() + " " + i);
        }
        return Boolean.TRUE;
    }

    public static void main(String[] args) throws Exception {
        for (int j = 0; j < 50; j++) {

            //调用Thread类的currentThread()方法获取当前线程
            System.out.println("主线程 ---> " + Thread.currentThread().getName() + " " + j);

            if (j == 10) {
                //创建并启动第一个线程
                Object call1 = new ThirdThreadImp1().call();
                System.out.println(call1);
                //创建并启动第二个线程
                Object call2 = new ThirdThreadImp1().call();
                System.out.println(call2);
            }
        }
    }
}

